package com.lyy.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Liangyaoyun
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private static final Integer SUCCESS_CODE = 1;
    private static final Integer FAILURE_CODE = 0;
    private static final String SUCCESS_MESSAGE = "SUCCESS";
    private static final String FAILURE_MESSAGE = "FAILURE";

    /** 响应代码 */
    private Integer code;
    /** 响应描述 */
    private String message;
    /** 响应数据 */
    private Object data;

    /**
     * 操作成功，响应代码，响应描述和响应数据均需调用方传递
     *
     * @param code    响应代码
     * @param message 响应描述
     * @param data    响应数据
     * @return Result对象
     */
    public static Result success(int code, String message, Object data) {
        return new Result(code, message, data);
    }

    /**
     * 操作成功，无响应数据
     *
     * @return Result对象
     */
    public static Result success() {
        return success(SUCCESS_CODE, SUCCESS_MESSAGE, null);
    }

    /**
     * 操作成功，响应数据需要调用方传递
     *
     * @param data 响应数据
     * @return Result对象
     */
    public static Result success(Object data) {
        return success(SUCCESS_CODE, SUCCESS_MESSAGE, data);
    }

    /**
     * 操作成功，响应代码和响应描述均需调用方传递，无响应数据
     *
     * @return Result对象
     */
    public static Result success(int code, String message) {
        return success(code, message, null);
    }

    /**
     * 操作失败，响应代码和响应描述均需调用方传递，无响应数据
     *
     * @param code    响应代码
     * @param message 响应描述
     * @return Result对象
     */
    public static Result failure(Integer code, String message) {
        return new Result(code, message, null);
    }

    /**
     * 操作失败
     *
     * @return Result对象
     */
    public static Result failure() {
        return failure(FAILURE_CODE, FAILURE_MESSAGE);
    }
}
